
dojo.provide("dojo.widget.Manager");dojo.require("dojo.lang.array");dojo.require("dojo.lang.func");dojo.require("dojo.event.*");dojo.widget.manager=new function(){this.widgets=[];this.widgetIds=[];this.topWidgets={};var widgetTypeCtr={};var renderPrefixCache=[];this.getUniqueId=function(widgetType){var widgetId;do{widgetId=widgetType+"_"+(widgetTypeCtr[widgetType]!=undefined?++widgetTypeCtr[widgetType]:widgetTypeCtr[widgetType]=0);}while(this.getWidgetById(widgetId));return widgetId;};this.add=function(widget){this.widgets.push(widget);if(!widget.extraArgs["id"]){widget.extraArgs["id"]=widget.extraArgs["ID"];}
if(widget.widgetId==""){if(widget["id"]){widget.widgetId=widget["id"];}else{if(widget.extraArgs["id"]){widget.widgetId=widget.extraArgs["id"];}else{widget.widgetId=this.getUniqueId(widget.ns+"_"+widget.widgetType);}}}
if(this.widgetIds[widget.widgetId]){dojo.debug("widget ID collision on ID: "+widget.widgetId);}
this.widgetIds[widget.widgetId]=widget;};this.destroyAll=function(){for(var x=this.widgets.length-1;x>=0;x--){try{this.widgets[x].destroy(true);delete this.widgets[x];}
catch(e){}}};this.remove=function(widgetIndex){if(dojo.lang.isNumber(widgetIndex)){var tw=this.widgets[widgetIndex].widgetId;delete this.topWidgets[tw];delete this.widgetIds[tw];this.widgets.splice(widgetIndex,1);}else{this.removeById(widgetIndex);}};this.removeById=function(id){if(!dojo.lang.isString(id)){id=id["widgetId"];if(!id){dojo.debug("invalid widget or id passed to removeById");return;}}
for(var i=0;i<this.widgets.length;i++){if(this.widgets[i].widgetId==id){this.remove(i);break;}}};this.getWidgetById=function(id){if(dojo.lang.isString(id)){return this.widgetIds[id];}
return id;};this.getWidgetsByType=function(type){var lt=type.toLowerCase();var getType=(type.indexOf(":")<0?function(x){return x.widgetType.toLowerCase();}:function(x){return x.getNamespacedType();});var ret=[];dojo.lang.forEach(this.widgets,function(x){if(getType(x)==lt){ret.push(x);}});return ret;};this.getWidgetsByFilter=function(unaryFunc,onlyOne){var ret=[];dojo.lang.every(this.widgets,function(x){if(unaryFunc(x)){ret.push(x);if(onlyOne){return false;}}
return true;});return(onlyOne?ret[0]:ret);};this.getAllWidgets=function(){return this.widgets.concat();};this.getWidgetByNode=function(node){var w=this.getAllWidgets();node=dojo.byId(node);for(var i=0;i<w.length;i++){if(w[i].domNode==node){return w[i];}}
return null;};this.byId=this.getWidgetById;this.byType=this.getWidgetsByType;this.byFilter=this.getWidgetsByFilter;this.byNode=this.getWidgetByNode;var knownWidgetImplementations={};var widgetPackages=["dojo.widget"];for(var i=0;i<widgetPackages.length;i++){widgetPackages[widgetPackages[i]]=true;}
this.registerWidgetPackage=function(pname){if(!widgetPackages[pname]){widgetPackages[pname]=true;widgetPackages.push(pname);}};this.getWidgetPackageList=function(){return dojo.lang.map(widgetPackages,function(elt){return(elt!==true?elt:undefined);});};this.getImplementation=function(widgetName,ctorObject,mixins,ns){var impl=this.getImplementationName(widgetName,ns);if(impl){var ret=ctorObject?new impl(ctorObject):new impl();return ret;}};function buildPrefixCache(){for(var renderer in dojo.render){if(dojo.render[renderer]["capable"]===true){var prefixes=dojo.render[renderer].prefixes;for(var i=0;i<prefixes.length;i++){renderPrefixCache.push(prefixes[i].toLowerCase());}}}}
var findImplementationInModule=function(lowerCaseWidgetName,module){if(!module){return null;}
for(var i=0,l=renderPrefixCache.length,widgetModule;i<=l;i++){widgetModule=(i<l?module[renderPrefixCache[i]]:module);if(!widgetModule){continue;}
for(var name in widgetModule){if(name.toLowerCase()==lowerCaseWidgetName){return widgetModule[name];}}}
return null;};var findImplementation=function(lowerCaseWidgetName,moduleName){var module=dojo.evalObjPath(moduleName,false);return(module?findImplementationInModule(lowerCaseWidgetName,module):null);};this.getImplementationName=function(widgetName,ns){var lowerCaseWidgetName=widgetName.toLowerCase();ns=ns||"dojo";var imps=knownWidgetImplementations[ns]||(knownWidgetImplementations[ns]={});var impl=imps[lowerCaseWidgetName];if(impl){return impl;}
if(!renderPrefixCache.length){buildPrefixCache();}
var nsObj=dojo.ns.get(ns);if(!nsObj){dojo.ns.register(ns,ns+".widget");nsObj=dojo.ns.get(ns);}
if(nsObj){nsObj.resolve(widgetName);}
impl=findImplementation(lowerCaseWidgetName,nsObj.module);if(impl){return(imps[lowerCaseWidgetName]=impl);}
nsObj=dojo.ns.require(ns);if((nsObj)&&(nsObj.resolver)){nsObj.resolve(widgetName);impl=findImplementation(lowerCaseWidgetName,nsObj.module);if(impl){return(imps[lowerCaseWidgetName]=impl);}}
dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+widgetName+"\" in \""+nsObj.module+"\" registered to namespace \""+nsObj.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");for(var i=0;i<widgetPackages.length;i++){impl=findImplementation(lowerCaseWidgetName,widgetPackages[i]);if(impl){return(imps[lowerCaseWidgetName]=impl);}}
throw new Error("Could not locate widget implementation for \""+widgetName+"\" in \""+nsObj.module+"\" registered to namespace \""+nsObj.name+"\"");};this.resizing=false;this.onWindowResized=function(){if(this.resizing){return;}
try{this.resizing=true;for(var id in this.topWidgets){var child=this.topWidgets[id];if(child.checkSize){child.checkSize();}}}
catch(e){}
finally{this.resizing=false;}};if(typeof window!="undefined"){dojo.addOnLoad(this,"onWindowResized");dojo.event.connect(window,"onresize",this,"onWindowResized");}};(function(){var dw=dojo.widget;var dwm=dw.manager;var h=dojo.lang.curry(dojo.lang,"hitch",dwm);var g=function(oldName,newName){dw[(newName||oldName)]=h(oldName);};g("add","addWidget");g("destroyAll","destroyAllWidgets");g("remove","removeWidget");g("removeById","removeWidgetById");g("getWidgetById");g("getWidgetById","byId");g("getWidgetsByType");g("getWidgetsByFilter");g("getWidgetsByType","byType");g("getWidgetsByFilter","byFilter");g("getWidgetByNode","byNode");dw.all=function(n){var widgets=dwm.getAllWidgets.apply(dwm,arguments);if(arguments.length>0){return widgets[n];}
return widgets;};g("registerWidgetPackage");g("getImplementation","getWidgetImplementation");g("getImplementationName","getWidgetImplementationName");dw.widgets=dwm.widgets;dw.widgetIds=dwm.widgetIds;dw.root=dwm.root;})();